29. 视频: CASE 语句
11 CASE V2
CASE - 专家提示
-
CASE 语句始终位于 SELECT 条件中。
-
CASE 必须包含以下几个部分:WHEN、THEN 和 END。ELSE 是可选组成部分,用来包含不符合上述任一 CASE 条件的情况。
-
你可以在 WHEN 和 THEN 之间使用任何条件运算符编写任何条件语句(例如
WHERE
),包括使用 AND 和 OR 连接多个条件语句。
- 你可以再次包含多个 WHEN 语句以及 ELSE 语句,以便处理任何未处理的条件。
示例
在第一节课的练习中,你看到了以下问题:
-
创建一列用于将
standard_amt_usd
除以standard_qty
,以便计算每个订单的标准纸张的单价,将结果限制到前 10 个订单,并包含id
和account_id
字段。 注意 - 如果你的答案正确,系统将显示一个错误,这是因为你除以了 0。当你在下个部分学习 CASE 语句时,你将了解如何让此查询不会报错。
我们来看看如何使用 CASE 语句来避免这一错误。
SELECT id, account_id, standard_amt_usd/standard_qty AS unit_price
FROM orders
LIMIT 10;
现在我们使用一个 CASE 语句,这样的话,一旦 standard_qty 为 0,我们将返回 0,否则返回 unit_price 。
SELECT id, account_id, CASE WHEN standard_qty = 0 OR standard_qty IS NULL THEN 0
ELSE standard_amt_usd/standard_qty END AS unit_price
FROM orders
LIMIT 10;
该语句的第一部分将捕获任何分母为 0 并导致错误的情况,其他部分将按照常规步骤相除。你将发现对于标准纸张,所有客户的单价是 4.99 美元。这样比较合理,不会波动,并且比在上节课中向分母上加 1 来暂时解决错误这一方法更准确。
你可以使用下面的数据自己尝试下。